package com.huyirong.aicode.generator;

import cn.hutool.core.lang.Dict;
import cn.hutool.setting.yaml.YamlUtil;
import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.ColumnConfig;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.util.Map;

/**
 * mybatis-flex代码生成器
 */
public class MyBatisCodeGenerator {

    //要生成的表名
    private static final String[] TABLE_NAMES = new String[]{"chat_history"};

    public static void main(String[] args) {
            //获取数据源信息
            Dict dict = YamlUtil.loadByPath("application.yaml");
            Map<String, Object> dataSourceConfig = dict.getByPath("spring.datasource");
            String url = String.valueOf(dataSourceConfig.get("url"));
            String username = String.valueOf(dataSourceConfig.get("username"));
            String password = String.valueOf(dataSourceConfig.get("password"));

            //配置数据源
            HikariDataSource dataSource = new HikariDataSource();
            dataSource.setJdbcUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);

            //创建配置内容，两种风格都可以。
            GlobalConfig globalConfig = createGlobalConfig();

            //通过 datasource 和 globalConfig 创建代码生成器
            Generator generator = new Generator(dataSource, globalConfig);

            //生成代码
            generator.generate();
        }

        public static GlobalConfig createGlobalConfig() {
            //创建配置内容
            GlobalConfig globalConfig = new GlobalConfig();

            //设置根包,先生成到一个临时目录下，生成代码之后，再移动到对应的项目目录
            globalConfig.getPackageConfig()
                    .setBasePackage("com.huyirong.aicode.genresult");

            //设置表前缀和只生成哪些表，setGenerateTable 未配置时，生成所有表
            globalConfig.getStrategyConfig()
                    .setGenerateTable(TABLE_NAMES)
            //设置逻辑删除字段
                    .setLogicDeleteColumn("isDelete");

            //设置生成 entity 并启用 Lombok
            globalConfig.enableEntity()
                    .setWithLombok(true)
                    .setJdkVersion(21);

            //设置生成 mapper
            globalConfig.enableMapper();
            globalConfig.enableMapperXml();

            //设置生成Service
            globalConfig.enableService();
            globalConfig.enableServiceImpl();

            //设置生成Controller
            globalConfig.enableController();

            //可以单独配置某个列
            ColumnConfig columnConfig = new ColumnConfig();
            columnConfig.setColumnName("tenant_id");
            columnConfig.setLarge(true);
            columnConfig.setVersion(true);
            globalConfig.getStrategyConfig()
                    .setColumnConfig("tb_account", columnConfig);

            //设置生成注释
            globalConfig.getJavadocConfig()
                    .setAuthor("小组成员:胡意蓉、陈炜洁、杨豪喻、张晓凤、晏俭涛")
                    .setSince("");

            return globalConfig;
        }

}
